package com.inspinia.upms.dao;


import com.inspinia.base.dao.BaseDao;
import com.inspinia.upms.common.model.user.UpmsUser;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * 用户表 数据层
 *
 * @author ruoyi
 */
 public interface UpmsUserDao extends BaseDao<UpmsUser>{
    /**
     * 根据手机号码查找用户数量
     * @param phone
     * @return
     */
    int countByPhone(String phone);

    /**
     * 根据邮箱查找用户数量
     * @param email
     * @return
     */
    int countByEmail(String email);

    /**
     * 获取所有成人员信息
     *
     * @return
     */
    List<UpmsUser> getUserList();


    /**
     * 通过用户id查找角色id集合
     * @param userId
     * @return
     */
    List<Long> findRoleIdByUserId(@Param("userId") Long userId);

    /**
     * 在sys_user_role根据用户id删除对应的roleId
     * @param userId 用户id
     * @return
     */

    int deleteRole(@Param("userId") Long userId);

    /**
     * 根据角色获取用户
     * @param roleName
     * @return
     */
    List<UpmsUser> findUserByRoleNameAndOrgId(@Param("orgId")Long orgId, @Param("roleName") String roleName);
    /**
     * 向用户角色中间表sys_user_role插入数据
     * @param userId 用户id
     * @param roleIds 角色ids
     * @return
     */
    int addRole(@Param("userId") Long userId, @Param("roleIds") List<Long> roleIds);

    /**
     * 删除admin的role，但是不删除role=1的角色
     * @return
     */
    int deleteRoleAdmin();


    /**
     * 通过用户id查找用户信息
     *
     * @param userIds
     * @return
     */
    List<UpmsUser> findUserByIds(@Param("userIds") Collection userIds);

    /**
     * 查找所有用户id集合
     * @return
     */
    List<Long> findAllUserIds();

    /**
     * 根据用户id获取真实姓名
     * @param userId
     * @return
     */
    String getRealNameById(Long userId);

    /**
     * 通过用户id查询所属机构
     *
     * @param userId
     * @return
     */
    List<Long> findOrgIdsByUserId(@Param("userId") Long userId);

    /**
     * 查找用户所在的部门id
     *
     * @param id 用户id
     * @return 部门id集合
     */
    List<Long> findDeptIdsByUseId(@Param("userId") Long id);

    /**
     * 根据机构id查找机构下所有用户的集合
     *
     * @param deptIds 机构id集合
     * @return 用户id集合
     */
    List<Long> findUserIdsByDeptIds(@Param("deptIds") Collection<Long> deptIds);
    /**
     * 查找用户的岗位id
     *
     * @param userId 用户id
     * @return
     */
    List<Long> findPostIds(Long userId);
    /**
     * 根据用户名统计用户数量
     *
     * @param username 用户名
     * @param id       用户id
     * @return 用户数量
     */
    int countByUsername(@Param("username") String username, @Param("userId") Long id);
    /**
     * 删除用户的岗位关系
     *
     * @param id 用户id
     */
    int deletePost(Long id);
    /**
     * 添加用户和岗位的关系
     *
     * @param id      用户id
     * @param postIds 岗位id
     */
    int addPost(@Param("id") Long id, @Param("postIds") List<Long> postIds);
    /**
     * 在sys_organization_user根据用户id删除对应的roleId
     *
     * @param userId 用户id
     * @return
     */
    int deleteDept(@Param("userId") Long userId);
    /**
     * 向用户角色中间表sys_organization_user插入数据
     *
     * @param userId
     * @param deptIds
     * @return
     */
    int addDept(@Param("userId") Long userId, @Param("deptIds") List<Long> deptIds);
}
